約 4,222,506 件
https://w.atwiki.jp/taziro/pages/52.html
XNA では XInput によるデバイス入力が可能ですが、旧式の DirectInput によるデバイス入力には対応していません。 しかし、2009年現在でも XInput に対応していないゲームコントローラも数多く存在しており、これらに対応した Windows ゲームを制作したいこともあるかもしれません。 ここでは XNA で XInput 非対応のゲームコントローラを使用する方法をご紹介します。 SlimDX XBOX360 Controller Emulator [SlimDX] SlimDX は .Netアプリケーションから DirectX の API を使用するためのオープンソースのライブラリです。 SlimDX.DirectInput を使用したデバイス入力が行えます。 SlimDX(英語) http //slimdx.mdxinfo.com/ SlimDX と C# で学ぶ DirectX http //mainori-se.sakura.ne.jp/slimdxwiki/wiki.cgi?page=SlimDX+%A4%C8%A4%CF [XBOX360 Controller Emulator] XBOX360 Controller Emulator は DirectInput 対応のゲームコントローラを XInput に対応させるためのプログラムです。 ToCA EDIT Downloads Recent Projects XBOX360 Controller Emulator v3.0(英語) http //www.tocaedit.com/IB/index.php?automodule=downloads showfile=4 1:ダウンロードサイトから「XBOX360 Controller Emulator v3.0」をダウンロードします。 ※ダウンロードした圧縮ファイルには下記のファイルが含まれています。 ○DLL dinput8.dll xinput9_1_0.dll xinput1_3.dll ○設定INIファイル xbox360cemu.ini ○テストアプリケーション XInputTest.exe 2:XNA ゲームの実行ファイル(.exe)と同じフォルダに「xinput1_3.dll」「xbox360cemu.ini」をコピーします。 3:下記の場合に GamePad.GetStateメソッドや GamePad.GetCapabilitiesメソッドを呼び出すと InvalidOperationException 例外がスローされるので、これに対処するための記述を追加します。 ○指定した PlayerIndex のゲームコントローラが接続されていない場合 ○指定した PlayerIndex の設定が「xbox360cemu.ini」に記述されていない場合 try{gamePadStates[i] = GamePad.GetState((PlayerIndex)i, deadZone);gamePadCapabilities[i] = GamePad.GetCapabilities((PlayerIndex)i);}catch(InvalidOperationException e){} 以上の手順で XNA で XInput 非対応のゲームコントローラを使用できるようになります。 XNA クリエーターズ クラブ オンライン > 入力レポーター http //creators.xna.com/ja-JP/utilities/inputreporter このスクリーンショットでは確認できませんが、XInput 非対応のゲームコントローラを使用しています。 ※「xbox360cemu.ini 」の設定変更 ○デフォルトではゲームコントローラは一つだけしか設定されていませんので、ゲームコントローラ1の設定を他のゲームコントローラにコピーするようにします。 ○デフォルトでは初期化時にビープ音が鳴るようになっていますので、これを OFF にします。 [Options]UseAutoPad=1#use 0 to 1; automatically make other PAD to PAD1 after detecting movementUseInitBeep=0#use 0 to 1; default 1; beep on init}
https://w.atwiki.jp/kachan/pages/39.html
【 送信距離改良 】 トイラジ(CAR)において、遠隔操作可能な距離は、精々10mが限界と言われています。 距離を少しでも稼ぐためには、送受信用のアンテナを長くすることが有効ですが、悪戯に長くしすぎても、取り扱いが大変になるだけです。 カスタマックスのコントローラ(送信機)についているロッドアンテナは 「4段・30.5cm 取付ネジ:メス」のタイプです。 これに代用できそうなものがママーズのサイトに紹介されていました。 上段: T-10 (5段・49cm 取付ネジ:メス) ○ 中段: T-148(2段・28.5cm 取付ネジ:オス) X 下段: T-200(7段・95cm 取付ネジ:メス) ○ T-10 は、無加工で交換取り付け可能です。 T-200は、未確認ですが、一見するに標準より少々太くなりそうです。この場合、コントローラの差込穴を広げれば取り付け可能だと思いますが、1mもあったら邪魔でしょ・・・ アンテナ交換結果(T-10) ・室内(鉄筋コンクリートマンション内にて) 標準アンテナでは、2-3m離れたところで、チャタリングを起こしていましたが、4-5m程度まで操作距離が改善されました。 ・屋外(障害物・建物の無い公園にて) 標準アンテナでも、意外なほど電波は届き、25m程度まで操作することが出来ました。 その後T-10に変えてみると、40m程度まで操作可能となり、十分な効果を得られました。 ※この結果は、Normalモータを用いた場合です。 社外のハイパワーモータを使用している場合は、十分な効果が得られない場合が あります。 【 TURBOボタンの改良 】 Turboは常に働いたほうがいい! ボタン操作なんて面倒くさい! という場合は、コントローラの基板をちょこっと弄れば実現できます。 J1とJ2を適当な導線で短絡するだけです。 注)半田付けする際には、必ず電池を抜いておくこと。 Turbo信号は、ターン時やREV時には勝手にキャンセルされるので、短絡したままでも、何ら問題はありません。 この結果、FWD2速が1速になってしまいますが、豪快に走らせるのなら、こちらの方が楽しいかも… 【 Turboボタンの切り替えSW 】 Turboボタンの「常時ON」と「通常動作」が切り替えできるように、スナップスイッチを取り付けてみました。 フラット路面はTurbo全開!でもOKなのですが、悪路走行の場合は、TurboON/OFFできたほうが都合が良かったりもするので、通常モードも選択できるようにしました。 【 フルタイムTurbo情報 】 ターン時やREV時も含めて、文字通り「常時TurboON」にすることも可能です。 但しこの場合には、シャシ側の基板(受信機)を改造する必要があります。 作業自体は、さほど難しいことではありません。基板(下面)にある、J1(0Ω)のチップ抵抗を取り外すことによって、PWMの機能を解除することができます。 (データシートは こちら)
https://w.atwiki.jp/wiigc/pages/14.html
公式サイト http //www.nintendo.co.jp/ngc/acce/index.html ◆ゲームキューブ用コントローラ スレ感想まとめ http //www.geocities.jp/s_dust0083/c/gc.html
https://w.atwiki.jp/pentagon/pages/80.html
もうだいぶ前に作ってあったんだけどアーケードコントローラの記事です うちはRGBモニタがあるんですが、アーケード用のモニタがあるならせっかくなのでアケコンを使いたいものです。 今回はwindowsでも使えてしまうxboxのコントローラをベースにアケコンを作りました。 xboxはmameやらfbaxなどのアーケードエミュも充実しているため、xboxはアーケードがやりたいやつにはもってこい。 ↓購入時のアケコン ↓汚れがひどかったので塗装してしまいました。ボタンも替えたり ↓背面です。ベニア板を背面のフタにしてます ↓1p側配線。汚い。ちなみにxboxのコントローラ基盤はタイラップで4方向から引っ張って固定 ↑ちなみにロータリースイッチを使ってボタン配置を切り替えられるようにしてます ↓2p側 xboxコントローラ側の配線ポイントです。 士工房のpintel君提供!pinちゃんthx^-^ 詳細は多機種で使えるコントローラで!
https://w.atwiki.jp/kisarazu_maicon/pages/108.html
コントローラ コントローラ職人になりたくないか? ロボコンの中でも試合中にアイディアとセンスが必ず光る,コントローラ製作のためのページ 外観 一番重要! 一目見て「コントローラだ!」or「絶対あれコントローラじゃない!」と思えるコントローラが基本. 既製品流用タイプでは,デュアルショック2やWii,スマートフォンなどがある. 触ったことがあるコントローラは誰でも使えるところが特徴. 一方で自作も熱い. 台付きコントローラは注目の的,ましてやコントローラがロボットサイズにできるなど,フリーダムである. ただし高専ロボコンではコントローラもロボットの重量に含まれるので注意. ただし,光らせるのは基本です. また,ある程度強度が必要です. 例えばロボットの操縦中に暴走した場合,コントローラをゆっくり置いている暇はないです. よってどんな向きにもでおけることがベスト.基板の露出は避けましょう. 肩掛け用ベルトがあると便利です. ボタンについても,結構目立ちます. 静電容量式も今では簡単に実現できたりします. もちろんボタンをパネル下に隠してタッチパネル風にしてもかっこいい. 実はコントローラはセンサの塊. ロボットのセンサの数の比じゃないです. そうした意味で既製品の流用は結構価値があります. ロボコン向けの通信フォーマットについて 無線通信では通信量に制限があるため,通信フォーマットは重要. また通信が切れた場合にも備えられるような通信フォーマットでないとロボットの暴走の可能性もある. 高専ロボコンで操縦するロボットは近距離で特定の操縦者がロボットとフィールドを見ながら操縦することが前提となる. 求められるのは操縦者に適した操作性と,ある程度の応答性と安定性である. 人がロボットの反応に遅れを感じ始めるのが,およそ0.2秒. それ以上速ければ違和感なくロボットを操縦可能. ただし一部の人たちはそれ以上を求める模様. 9600bpsで0.1秒あれば,約100bitも送ることが可能. ただし通信そのものに遅れもあるので,実質0.05秒程度でコマンドを送ることが望ましい. すると,送れるのは50bit,8bitで送っていくと48bitで一つのコマンドを送ることが可能. 必ずしも8bitだけでコマンドデータを送ろうと思ってはいけませんよ. パリティチェックなども全く行えませんので. 2回送受信 応答性が下がる代わりに安定性が高まる方法. 同じデータを必ず2回以上送信し,受信側では2回以上の受信で動く. ノイズ耐性が非常に高くなる代わりに,2倍の周期を要するため,非効率. パリティチェック 最後に1bitのパリティを加え,信号があっているか判断する方法. 基本的なパリティチェックはデータを二進数で表記した場合に1または0の数が偶数か奇数になるように1ビットを変え,受信側で偶数か奇数かを判断し,間違っていたらデータを破棄する. 少ないビット数でデータの信頼性を向上することが可能. パリティのビット数を上げれば正誤だけでなく誤り位置まで判断することが可能. それは垂直パリティや水平パリティなどを調べるとよい. ロボットのインターフェースについて いろいろと書きたいことがあるので、別のページで。
https://w.atwiki.jp/kachan/pages/62.html
ちっこくて操作し難いコントローラ。 レシーブポーズで長い時間操作するのは、なかなか辛いものがあります。 おまけにボタン電池仕様なので、直ぐに電池切れになってしまうし。。。 そこで目をつけたのがエアロR/Cのコントローラ! これにQステのコントローラ基板を組み込み、サイズアップによる操作性の改善と、単三電池化を一気にやってしまおうと思います。 【 コントローラ基板を検証する 】 FWD・REV・LEFT・RIGHT・TURBOの5つのSWのほかに、バンド切替用の接点が見えます。 (訂正:QステはTURBOではなくてDashなんですね!) 何も導通しない状態が「Ach」 1と2を導通させると「Bch」 1と3を導通させると「Cch」 4と5を導通させると「Dch」 となります。 バンド切替SWのスライダーを移植するのは骨が折れるので、基板移植の際に、それぞれ導通させてバンド固定で使うも良し、面倒なら何もせずにAch固定でも良し。別途SWが用意できれば尚良し・・・。 左下の黒丸の下にICが眠っています。。。 電池ケースは使用しないのでガシガシ破壊します。 TURBO(Dash)用のSW電極も要らないので取り外します。 LEDのリードは長さが足りなくなるので、別に用意した長めのもので張り直します。 【 エアロRCコントローラの改造 】 アンテナ取り付け位置にLEDを仕込むため、穴をΦ5mmに広げます。 アンテナチューブを差し込むためのスリットが付いているので、センターに穴を開けるのは少々難しいです。リーマを使って少しずつ広げていくのが吉。 その右側にはTURBO用(Dash用)のプッシュスイッチを追加しています。 BAND切替SWは取り敢えず省略。 ※「Ach専用」として動作させることにしました。 【エアロ基板の加工】 エアロ基板は、IC以外の部品は全て除去。スイッチと電池BOXからの取込ワイヤのみを転用します。 ※ 画像をクリックすると拡大表示します。 エアロの回路は、GNDラインがスイッチのCOMMONになっているため、何箇所かパターンカットして、元の電源系と分離する必要があります。(橙色部分) 黄色○部分は、はんだ付けするポイントです。 ・A:COMMON(SW LINE) ・B:FWD ・C:REV ・D:RIGHT ・E:LEFT ・F:+ LINE ・G:- LINE ・H:COMMON(SW LINE) 【 改造を終えて・・・ 】 単三化により電池切れの不安も無くなり、またポジション的にも大いに改善することができました。 LEDの取り付けをケースから突き出す形にしたためか、操作可能な距離が改善されたような気もします。 もっとも、そんなに遠く離れて操作するようなこともないのですが・・・ 【 TURBOスイッチ 】 カスタマックス同様、外部スイッチを使って常時TURBOONにしたらどうかと思いましたが、QSTEERの場合はこれができません。なぜなら・・・ 未走行の場合でも、TURBOスイッチを短絡すると、信号が出たまま(LEDが点滅)になってしまうためです。 (ただし、別途電源スイッチを装備すればこの技も可能ですが、スイッチの切り忘れで電池が無くなりそう・・・)
https://w.atwiki.jp/mokeibu/pages/42.html
現在使用されているコントローラについての資料とか 現行プログラム
https://w.atwiki.jp/mokeibu/pages/50.html
Arduinoコントローラの製作 現時点で一つしかないコントローラの予備用と、製作するEH500に合わせてコントローラを新造することになった。 今までのコントローラではPICを使用していたが、このコントローラではArduinoを使用する。 Arduinoについて Arduino(アルドゥイーノ)は、AVRマイコン、入出力ポートを備えた基板、C言語風のArduino言語とそれの統合開発環境から構成されるシステム。(wikipediaより) 部活で購入したのはArduino uno R3。Arduinoの中でも標準的な物で、USBIFがあるので通信が便利。 ICの殆どのI/Oピンがボード上のコネクタに接続されており、デジタル入出力、アナログ入出力、PWM出力、シリアル通信などの機能を備える。 CIMG2372.jpg 部で購入したArduino。これに回路を接続していく コントローラの製作 届いたArduino本体と、ブレッドボードなどを使って回路を組んでいくと同時にプログラムを作成する。 プログラムはPCと付属のUSBケーブルで接続し、開発環境から書き込む。ドライバーとポート設定に注意。(デバイスマネージャーで確認できる) USBケーブルで接続している時は電源を供給する必要が無く、バスパワーで駆動する。 0002.jpg 試作回路第一号。PWM出力を5段階で出してみるだけの簡単なもの。もちろん後々に大量の回路を接続していく。 設計 コントローラと車両の接続は既存のコントローラと同一の設計とする(互換性を持たせる) 表示装置としては、電圧計(20V/30V)、パイロットランプ、前後進LED(中立有り)、PWM信号確認LED、エラーLED等。 プログラム置き場(ログ) 無段階可変抵抗をアナログピンにつないで無段階制御に挑戦→一瞬抜け落ちるように電圧がなくなるので修正中。 Ver.2.30テストモードを実装。→動作しないバグがあった模様。修正中。 Ver.2.21正常に動作しないバグを修正。 Ver.2.20固定だった出力%を、プログラム上で変更できるように変更。 Ver2.11後進時にLEDが正常に動作しないバグを修正。(一応の雛形完成) Ver2.10ブレッドボードで組んだ回路で実験した際に出たバグを修正。動作確認用に、電源投入後1秒間、LEDを全て(PWM確認用を除く)点灯させるサブルーチン追加。 Ver2.00回路の完成版に合わせて製作。前進・後進の区別を追加。 Ver1.50ひとまず終わった回路設計に合わせて製作したもの。前進・後進の区別などが無い。また、出力100%でも実際は100%ではない(プログラムミス) Ver1.00第一号試作回路用。5つの入力に対し、それぞれ20、40、60、80、100%のPWM出力をするのみ。
https://w.atwiki.jp/controllerpad/pages/15.html
USB以外のゲームコントローラ23個目DPPゲームポート https //toro.5ch.net/test/read.cgi/hard/1303623676/ USB以外のゲームコントローラ22個目DPPゲームポート https //hibari.5ch.net/test/read.cgi/hard/1230163218/ 【DPP】ゲームコントローラ21個目【ゲームポート】 https //pc11.5ch.net/test/read.cgi/hard/1196446844/ 【DPP】ゲームコントローラ20個目【ゲームポート】 https //pc11.5ch.net/test/read.cgi/hard/1157990563/ 【DPP】ゲームコントローラ19個目【ゲームポート】 https //pc8.5ch.net/test/read.cgi/hard/1113859420/ PC用ゲームコントローラ 18個目 https //pc8.5ch.net/test/read.cgi/hard/1107360417/ PC用ゲームコントローラ 17個目 https //pc5.5ch.net/test/read.cgi/hard/1100644591/ PC用ゲームコントローラ 16個目 https //pc5.5ch.net/test/read.cgi/hard/1094900584/ PC用ゲームコントローラ 15個目 http //pc5.2ch.net/test/read.cgi/hard/1091916623/ PC用ゲームコントローラ 14個目 https //pc5.5ch.net/test/read.cgi/hard/1088674456/ PC用ゲームコントローラ 13個目 https //pc5.5ch.net/test/read.cgi/hard/1083006793/ PC用ゲームコントローラ 12個目 https //pc4.5ch.net/test/read.cgi/hard/1076318752/ PC用ゲームコントローラ 11個目 https //pc3.5ch.net/test/read.cgi/hard/1070771846/ PC用ゲームコントローラ 10個目 https //pc3.5ch.net/test/read.cgi/hard/1066070664/ PC用ゲームコントローラ 9個目 https //pc3.5ch.net/test/read.cgi/hard/1061311880/ PC用ゲームコントローラ 十字キー8個目 https //pc3.5ch.net/test/read.cgi/hard/1054044461/ PC用ゲームコントローラ 十字キー7個目 https //pc3.5ch.net/test/read.cgi/hard/1048229306/ PC用ゲームコントローラ 十字キー6個目 https //pc3.5ch.net/test/read.cgi/hard/1043467130/ PC用ゲームコントローラ 十字キー5個目 https //pc3.5ch.net/test/read.cgi/hard/1039149678/ PC用ゲームコントローラ 4個目 https //pc3.5ch.net/test/read.cgi/hard/1031504107/ ゲームコントローラpart3 https //pc3.5ch.net/test/read.cgi/hard/1020598946/ 【なんでそーなるの】ゲームコントローラpart2 https //pc.5ch.net/test/read.cgi/hard/1013938155/ ゲームコントローラ https //pc.5ch.net/test/read.cgi/hard/984186389/
https://w.atwiki.jp/gbspec/pages/16.html
FF00 - P1/JOYP - ジョイパッド (読み込み/書き込み可能) ボタンと方向キーは合計で 8 個あり、 2x4 の行列形式になっています。 このレジスタに書き込むことで、ボタンと方向キーの選択ができ、それぞれビット 0 から 3 で読み込むことができます。 Bit 7 - 未使用 Bit 6 - 未使用 Bit 5 - P15 ボタンの選択 (0 = 選択) Bit 4 - P14 方向キーの選択 (0 = 選択) Bit 3 - P13 下キー または スタートボタン (0 = 押下状態) (読み込み専用) Bit 2 - P12 上キー または セレクトボタン (0 = 押下状態) (読み込み専用) Bit 1 - P11 左キー または B ボタン (0 = 押下状態) (読み込み専用) Bit 0 - P10 右キー または A ボタン (0 = 押下状態) (読み込み専用) 多くのゲームで、この値は何度か連続で読み込まれます。 (最初の読み込みで入力を安定させ、後で読み込んだ方の値が実際に使われます。) 通常、 P1 レジスタに 30h を書きこんでおき、 P15、 P14 の出力を High にしておきます。 ボタン (スタート、セレクト、 B、 A) の走査をするときは、 P15 の出力を Low にして、 P13 ~ P10 の High、 Low を読み取ります。 また、方向キー (上下左右) の走査をするときは、 P14 の出力を Low にして、 P13 ~ P10 の High、 Low を読み取ります。 押されていなければ High で、押されていれば Low になります。 機種判定 P1 レジスタに 03h を書きこんだ後、このレジスタの値を読み込むと機種の判定ができます。 Fxh ならゲームボーイ、 3xh ならスーパーゲームボーイです。 スーパーゲームボーイでの使用 スーパーゲームボーイのゲームでは、 FF00 のレジスタを別の用途で使用します。 スーパーファミコンへ、コマンドパケットを送信する 最大 4 つまでのコントローラに対応する INT 60 - ジョイパッド割り込み 上に書いた入力ラインが High から Low へ切り替わる時に、ジョイパッド割り込みが要求されます。 通常、キーが押された時に割り込みが発生します (ボタン、方向キーはビット 4 ・ 5 で有効になります)。 しかし通常、 1 回ボタンを押す・離す度に、 1 回以上の High から Low へのバウンスが発生します。 ジョイパッド割り込みの使用 ジョイパッド割り込みは、通常、使い道がありません。 ボタンと方向キーを同時に選択している時でも、すべてのキー入力を認識することができないし、 ボタンがすでに押されている時に、関連する方向キーが押されたとしても区別することができません。 キー入力割り込みは、 スタンバイ状態 (STOP 命令を実行した後の、低消費電力状態) を停止させる時にのみ、意味のある使い方ができます。 また、ジョイパッド割り込みはゲームボーイカラー本体と、ゲームボーイアドバンス本体では発生しません。 (ジョイパッドのキー入力で、 STOP 状態を停止させること自体はできます。) ジョイパッド・スキャン例 次にジョイパッド・スキャン例を示す。これは、C言語で記述してあり、GBDKでコンパイルすることができる。走査結果が、16進値で表示され、ジョイパッドを押すことによってその値が変化することを確かめられる。 #include stdio.h /* p1 レジスタ */ #define P1_REG (*(UBYTE *)0xFF00) void main() { UBYTE padA; UBYTE padB; UBYTE padC; while(TRUE){ // ボタンの走査 P1_REG = 0x10; // 出力端子p15をLowに設定 padA = P1_REG; // ちょっと待つ padA = P1_REG 0x0F; // 読み取り(下位4ビットのみ有効) // 十字キーの走査 P1_REG = 0x20; // 出力端子p14をLowに設定 padB = P1_REG; // ちょっと待つ padB = P1_REG 0x0F; // 読み取り(下位4ビットのみ有効) // ボタン、十字キーのごちゃ混ぜ走査 P1_REG = 0x00; // 出力端子P15,p14をLowに設定 padC = P1_REG; // ちょっと待つ padC = P1_REG 0x0F; // 読み取り(下位4ビットのみ有効) // 走査結果を表示 printf("p15 %x-p14 %x [%x]\n", keyA, keyB, keyC); P1_REG = 0x30; } } ジョイパッド関数 ▼ジョイパッド走査 構文 #include gb.h UBYTE joypad(void); 戻り値 ジョイパッドの走査値。以下の値の論理和が返される。 ■ジョイパッドの定義 J_START Start ボタン J_SELECT Select ボタン J_B B ボタン J_A A ボタン J_DOWN 下方向キー J_UP 上方向キー J_LEFT 左方向キー J_RIGHT 右方向キー 説明 押されているジョイパッドの走査結果を戻す。 関連項目 waitpad, waitpadup ▼ジョイパッド入力待ち 構文 #include gb.h UBYTE waitpad(UBYTE mask); 戻り値 ジョイパッドの走査値。joypad関数参照。 説明 maskで指定したジョイパッドのキー・ボタンが押下されるまで待つ。 関連項目 joypad, waitpadup ▼ジョイパッド リリース待ち 構文 #include gb.h UBYTE waitpadup(void); 戻り値 なし。 説明 ジョイパッドのキー・ボタンが離されるまで待つ。関数呼び出し前に押されていなければ、すぐに戻る。 関連項目 joypad, waitpad ■使用例: #include stdio.h #include gb.h void main() { int i; char s[8]; printf("Push Start button!\n"); // Startボタンの入力待ち waitpad(J_START); while(TRUE){ // ジョイパッド入力 i = joypad(); // 入力判断 if (i J_UP ) { s[0] = U ; } else { s[0] = - ; } if (i J_DOWN ) { s[1] = D ; } else { s[1] = - ; } if (i J_LEFT ) { s[2] = L ; } else { s[2] = - ; } if (i J_RIGHT) { s[3] = R ; } else { s[3] = - ; } s[4] = / ; if (i J_A ) { s[5] = A ; } else { s[5] = - ; } if (i J_B ) { s[6] = B ; } else { s[6] = - ; } s[7] = NULL; // 判定結果を表示 printf("%s\n", s); // Selectボタンが押されていれば、離されるまで待機 if (i J_SELECT) waitpadup(); } }